package logic
{
	import com.demonsters.debugger.MonsterDebugger;

	public class LogicBarleybreak
	{
		private static var instance:LogicBarleybreak;
		public function LogicBarleybreak()
		{
		}
		public static function getInstance():LogicBarleybreak{
			if(!instance)
				instance = new LogicBarleybreak();
			return instance;
		}
		
		public function getRandomMatrix(countCeil:int=5):Array{
			var countCeils:int=0;
			var rezAr:Array = new Array();
			for (var i:int = 0; i < countCeil; i++) {
				rezAr.push(new Array());
				for (var j:int = 0; j < countCeil; j++) 
				{
					rezAr[i][j]=countCeils;
					countCeils++;
				}
				
			}
			
			for (var k:int = 0; k < rezAr.length; k++) {
				for (var q:int = 0; q < rezAr.length; q++) {
					var temp_k:int = Math.random()*rezAr.length;
					var temp_q:int = Math.random()*rezAr[k].length;
					var n:int = rezAr[k][q];
					rezAr[k][q] = rezAr[temp_k][temp_q];
					rezAr[temp_k][temp_q] = n;
				}
				
			}
			return rezAr;
		}
		
		/**
		 * 
		 * @param number - число клетки для которой ищем перемещение
		 * @param arMatrix - матрица в которой ищем
		 * @return int - -1 - сдвинуть влево
		 * 				  1 - вправо
		 * 				 -2 - вверх
		 * 				  2 - вниз
		 * 				  0 - не сдвигать
		 * 
		 */		
		public function getMoveCell(number:int,arMatrix:Array):int{
			for (var i:int = 0; i < arMatrix.length; i++) 
			{
				for (var j:int = 0; j < arMatrix[i].length; j++) 
				{
					if(arMatrix[i][j] == number){
						if(j>0 && (arMatrix[i][j-1] == 0)){
							return -1;
						}
						if((j<(arMatrix[i].length-1)) && (arMatrix[i][j+1] == 0)){
							return 1;
						}
						if(i>0 && (arMatrix[i-1][j] == 0)){
							return -2;
						}
						if((i<(arMatrix.length-1)) && (arMatrix[i+1][j] == 0)){
							return 2;
						}
						return 0;
					}
				}
				
			}
			
			return 0;
		}
		
		public function isWin(matrix:Array):Boolean{
			var prevNumber:int = 0;
			for (var i:int = 0; i < matrix.length; i++) 
			{
				for (var j:int = 0; j < matrix[i].length; j++) {
					if(matrix[i][j] == 0){
						continue;
					}
					if(matrix[i][j] <prevNumber){
						return false;
					}
					prevNumber = matrix[i][j];
				}
			}
			
			return true;
		}
			
	}
}